package com.dc.juc.example._5_immutable;

import com.dc.juc.annoations.NotThreadSafe;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * Description: 使用final修饰变量
 *
 *  基本类型、String被 final 修饰后，不能再赋值
 *  对象 被 final 修饰后，不能再被指向其他对象，但是可以修改对象里面的值。
 *      由于还可以修改对象里面的属性值，因此只是被final修饰的成员变量 不是线程安全的
 *
 * @author: gdc
 * @date: 2021/8/4
 * @version 1.0
 */
@Slf4j
@NotThreadSafe
public class Immutable1 {

    private final static int a = 1;

    private final static String b = "a";

    private final static Map<Integer, Integer> MAP = Maps.newHashMap();

    static {
        MAP.put(1, 2);
        MAP.put(3, 4);
        MAP.put(5, 6);
    }

    public static void main(String[] args){
        // 基本类型、String被 final 修饰后，不能再赋值
        //a = 2;
        //b = "c";

        // 对象 被 final 修饰后，不能再被指向其他对象，但是可以修改对象里面的值
        //MAP = Maps.newHashMap();

        MAP.put(1, 10);
        log.info("{}", MAP);
    }

}
